package com.icinfo.cloud.provider.punish.common.publicsecurityentrust.service;


import com.icinfo.cloud.provider.common.service.PunishBaseService;
import com.icinfo.cloud.provider.punish.common.publicsecurityentrust.model.CasePublicSecurityEntrustDocumentNumberSegment;
import com.icinfo.cloud.provider.punish.common.publicsecurityentrust.vo.UsageSituationVo;

import java.util.List;
import java.util.Map;

/**
 *
 * @author HKxxx
 * @date 2024/2/2 10:12
 */
public interface ICasePublicSecurityEntrustDocumentNumberSegmentService extends PunishBaseService {

    /**
     * 批量新增号段
     *
     * @param segmentList
     */
    void insertBatch(List<CasePublicSecurityEntrustDocumentNumberSegment> segmentList);

    /**
     * 更新街道文号
     *
     * @return
     */
    int updateBySegmentSelective(CasePublicSecurityEntrustDocumentNumberSegment segment);

    /**
     * 更新街道文号
     *
     * @return
     */
    int updateBySegment(CasePublicSecurityEntrustDocumentNumberSegment segment);

    /**
     * 根据文号配置id 移除子号段信息
     *
     * @param documentNumberId
     */
    void removeByDocumentNumberId(String documentNumberId);

    /**
     * 根据文号配置id，查询子文号段集合
     *
     * @param documentNumberId
     * @return
     */
    List<CasePublicSecurityEntrustDocumentNumberSegment> listByDocumentNumberId(String documentNumberId);

    /**
     * 根据大段号段id集合获取分组的街道号段信息
     *
     * @param mainIds
     * @return
     */
    Map<String, Long> groupCountDocumentNumberSegment(List<String> mainIds);

    /**
     * 获取公安委托街道文号配置
     *
     * @param documentNumber
     * @param entrustOrgCode
     * @param orgCode
     * @return
     */
    CasePublicSecurityEntrustDocumentNumberSegment getDocumentNumberSegment(String documentNumber, String entrustOrgCode, String orgCode);


    /**
     * 获取正在使用的街道文号信息
     *
     * @param orgCode     委托单位的orgCode
     * @param userOrgCode 当前登录用户的orgCode
     * @return 正在使用的街道文号信息
     */
    CasePublicSecurityEntrustDocumentNumberSegment getRemainDocumentNumberInfo(String orgCode, String userOrgCode);


    /**
     * 获取当前部门未用完的所有号段数
     *
     * @param orgCode
     * @param userOrgCode
     * @param documentNumberId
     * @return
     */
    long getUnusedTotal(String orgCode, String userOrgCode, String documentNumberId);

    /**
     * 获取文号的使用情况
     *
     * @param segment 文号配置信息
     * @return used：使用数   surplus：剩余数
     */
    UsageSituationVo usageSituation(CasePublicSecurityEntrustDocumentNumberSegment segment);
}
